/**
 * Xilinx PS-GPIO 驱动适配层头文件
 * 张勇 / 41204@qq.com
 */

#ifndef _GPIO_H_
#define _GPIO_H_

#include <stdint.h>
#include <stdbool.h>
#include "share/std_err.h"
#include "mcu.h"

#ifdef __cplusplus
extern "C" {
#endif


/// GPIO 模式定义
typedef enum {
	GPIO_MODE_DISABLE = 0, // 禁用(默认上拉输入)
	GPIO_MODE_IN,          // 输入(不上拉/浮空输入)
	GPIO_MODE_OUT,         // 输出(无推挽/开漏,50MHz)
	GPIO_MODE_MAX
} gpio_mode_t;

/// 外部中断触发类型
/// @see "stm32f10x_exti.h": EXTITrigger_TypeDef
typedef enum {
    GPIO_INTR_POSEDGE,	// GPIO interrupt type : rising edge
    GPIO_INTR_NEGEDGE,	// GPIO interrupt type : falling edge
    GPIO_INTR_2EDGES ,	// GPIO interrupt type : rising and falling edges
    GPIO_INTR_LVHIGH ,	// GPIO interrupt type : level-high
    GPIO_INTR_LVLOW  ,	// GPIO interrupt type : level-low
	GPIO_INTR_MAX
} gpio_intr_type_t;

// 把统一定义的 gpio_intr_type_t 转换为 XScuGic_SetPriorityTriggerType() 中断触发类型
int scugic_intr_type(gpio_intr_type_t trig);
// 翻转 XScuGic 中断触发类型极性
int scugic_intr_type_toggle_polarity(uint8_t irq_type);


#ifdef __cplusplus
}
#endif

#endif // _GPIO_H_
